import adminListView from '$v/adminList';

import {
  addAdminRequest,
  adminListRequest,
  deleteAdminRequest,
  isLoginRequest
} from "$a/admin"

// 封装函数展示所有管理员列表
const showAdminList = async function (res) {
  let adminListResult = null
  try {
    adminListResult = await adminListRequest()
  } catch (e) {
    alert("获取管理员列表异常" + e.message)
    // 判断是否是权限异常
    if (!e.isLogin) {
      return router.go("/login")
    }
  }
  res.render(adminListView({
    adminList: adminListResult
  }))
}


export default async (req, res) => {

  // 路由切换的时候权限验证
  try {
    await isLoginRequest()
  } catch (e) {
    alert("删除管理员" + adminName + "异常")

    // 判断是否是权限异常
    if (!e.isLogin) {
      return router.go("/login")
    }
  }


  // 展示管理员功能 传入res
  // 当这个异步函数全部执行完成,才渲染页面,所以需要书写await
  await showAdminList(res)

  // 使用时间委派绑定事件,因为后来部分视图会重新渲染,如果给重新渲染的元素绑定事件,事件可能会失效
  document.onclick = async function (e) {
    // 添加管理员功能
    if (e.target.id === "saveAdminBtn") {
      // 获取元素的内容
      const adminNameValue = document.adminForm.adminName.value.trim()
      const passwordValue = document.adminForm.password.value.trim()
      const repasswordValue = document.adminForm.rePassword.value.trim()
      // 判断是否为空
      if (!adminNameValue || !passwordValue || !repasswordValue) {
        return alert('请勿输入空!!')
      }
      // 判断两次密码是否相同
      if (passwordValue !== repasswordValue) {
        return alert('两次密码输入不一致')
      }

      try {
        await addAdminRequest({
          adminName: adminNameValue,
          password: passwordValue,
          regTime: new Date().toLocaleString()
        })
        alert('添加成功')
        // 添加成功后触发关闭按钮
        document.getElementById('closeAdd').click()
        // 清空表单
        document.adminForm.reset()
        // 添加成功后渲染页面
        showAdminList(res)
      } catch (e) {
        alert('出错啦' + e.message)
        // 清空表单
        document.adminForm.reset()
        // 判断是否是权限异常
        if (!e.isLogin) {
          return router.go("/login")
        }
      }
    }
    // 删除管理员功能
    if (e.target.nodeName === "BUTTON" && e.target.parentNode.nodeName === "TD") {
      // 获取对应删除按钮的adminname属性
      const adminName = e.target.dataset.adminname
      // 发送删除请求
      try {
        await deleteAdminRequest(adminName)
        alert("删除管理员" + adminName + "成功")
        // 发送成功重新渲染页面
        showAdminList(res)
      } catch (e) {
        alert("删除管理员" + adminName + "异常")

        // 判断是否是权限异常
        if (!e.isLogin) {
          return router.go("/login")
        }
      }
    }
  }
}
